# -*- coding: utf-8 -*-
"""
@File: permissions.py
@author: chenxialin
@time: 4月 08, 2025 11:04
"""
from rest_framework import permissions

from book.models import UserProfile


class IsAdminOrReadOnly(permissions.BasePermission):
    """
    自定义权限类：仅允许图书管理员进行写操作，读者只允许读操作。
    """

    def has_permission(self, request, view):
        if request.method in permissions.SAFE_METHODS:  # GET, HEAD, OPTIONS
            return True  # 所有用户都可以查询
        # 非安全方法（POST, PUT, DELETE 等）需要检查用户角色
        user_profile = UserProfile.objects.get(user=request.user)
        return user_profile.role == 'admin'  # 只有图书管理员可以写操作


class IsAdminOrReadOnly(permissions.BasePermission):
    """
    自定义权限类：仅允许图书管理员进行写操作，读者只允许读操作。
    """

    def has_permission(self, request, view):
        if request.method in permissions.SAFE_METHODS:  # GET, HEAD, OPTIONS
            return True  # 所有用户都可以查询
        # 非安全方法（POST, PUT, DELETE 等）需要检查用户角色
        user_profile = UserProfile.objects.get(user=request.user)
        return user_profile.role == 'admin'  # 只有图书管理员可以写操作


class IsOwnerOrAdmin(permissions.BasePermission):
    """
    自定义权限类：仅允许用户查看自己的借阅记录，或管理员查看所有记录。
    """

    def has_object_permission(self, request, view, obj):
        # 如果是管理员，允许访问
        user_profile = UserProfile.objects.get(user=request.user)
        if user_profile.role in ['admin', 'root']:  # 图书管理员和系统管理员
            return True
        # 如果是普通用户，只能查看自己的记录
        return obj.user == request.user
